/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bff.bjj.dao;

import com.bff.bjj.musicobjects.BJJAlbum;
import com.bff.bjj.musicobjects.BJJArtist;
import com.bff.bjj.musicobjects.BJJSearchResult;
import com.bff.bjj.musicobjects.BJJSong;
import java.util.Collection;
import org.springframework.stereotype.Component;

/**
 *
 * @author bfindeisen
 */
@Component
public interface SearchDao {

    /**
     * Searches albums, artists, and titles for the search criteria.
     *
     * @param criteria
     * @return a collection of {@link BJJArtist}, {@link BJJAlbum}, and {@link BJJSong}
     * @throws BJJDatabaseException if there is a database problem
     */
    public BJJSearchResult searchAll(String criteria);

    /**
     * Returns a <CODE>Collection</CODE> of <CODE>BJJSong</CODE>s for an any
     * album containing the parameter album.
     *
     * @return a <CODE>Collection</CODE> of {@link BJJSong}s
     * @throws BJJDatabaseException if there is a database problem
     * @param criteria the album to match
     */
    public Collection<BJJAlbum> searchAlbums(String criteria);

    /**
     * Returns a <CODE>Collection</CODE> of <CODE>BJJArtist</CODE>s for an any
     * artist containing the parameter artist.
     *
     * @param criteria
     *            the search criteria
     * @return a <CODE>Collection</CODE> of {@link BJJSong}s
     * @throws BJJDatabaseException
     *             if there is a database problem
     */
    public Collection<BJJArtist> searchArtists(String criteria);

    /**
     * Returns a <CODE>Collection</CODE> of <CODE>BJJSong</CODE>s for an any
     * title containing the parameter title.
     *
     * @return a <CODE>Collection</CODE> of {@link BJJSong}s
     * @throws BJJDatabaseException if there is a database problem
     * @param criteria the search criteria
     */
    public Collection<BJJSong> searchTitles(String criteria);
}
